home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / trueSpace 7.6 / tS761B8Std.exe / {app} / Scripts / D3D / RsD3DPointRender.fx < prev    next >
Text File  |  2008-06-10  |  5KB  |  182 lines

  1. //----------------------------------------------------------------------
  2. //Point-rendering
  3. //
  4. //Author - Michal Valient
  5. //Copyright (C) 2004-2008 Caligari corporation
  6. //
  7. //----------------------------------------------------------------------
  8.  
  9.  
  10.  
  11. uniform float4x4 mToClip;
  12.  
  13. uniform float4 cColorMultiplier;
  14. uniform float4 cColorModifier;
  15.  
  16. uniform float fSizeMultiplier;
  17. uniform float fSizeModifier;
  18.  
  19. uniform float fOpacity;
  20.  
  21. #ifdef RsShaderHWSKINNING
  22.     #define SKIN_INDEX_SHIFT 0.001960784313725490196078431372549f
  23.     #define RTD3DMESH_MAXIMUM_BONE_COUNT 64
  24.     float4x3 RsD3DMaterialFromME_mSkinMatrices[RTD3DMESH_MAXIMUM_BONE_COUNT];
  25. #endif //RsShaderHWSKINNING
  26.  
  27. //Depth bias is now configurable inside code
  28. uniform float fDepthBias = 1.0f / 65536.0f; //Set depth bias to the value that will work for 16bit z-buffers
  29.  
  30. struct VS_MATPOINT_IN {
  31.     float4 vPosition    : POSITION; //position in object space
  32.     float4 cPointColor  : COLOR;    //point color
  33.     float  fPointSize   : PSIZE;    //point size
  34. };
  35.  
  36. typedef struct {
  37.     float4 vPosition    : POSITION; //position in object space
  38.     float4 cPointColor  : COLOR;    //point color
  39.     float  fPointSize   : PSIZE;    //point size
  40. } VS_MATPOINT_OUT;
  41.  
  42. VS_MATPOINT_OUT VS_CMaterialPointRender(            in VS_MATPOINT_IN input
  43.  
  44. #ifdef RsShaderHWSKINNING
  45.                                                     , in float4 D3_vInputBlendIndices : BLENDINDICES
  46.                                                     , in float4 D3_cInputBlendWeight : BLENDWEIGHT
  47. #endif //RsShaderHWSKINNING
  48.  
  49. )
  50. {
  51.     float4 local_vertex_position;
  52.     
  53. #ifdef RsShaderHWSKINNING
  54.  
  55.     float3 tmp_position = 0;
  56.      
  57.     //Get the blend weights
  58.     float4 blend_weights = (255.0f/127.0f)*D3_cInputBlendWeight - (128.0f / 127.0f);
  59.     float4 blend_indices = D3_vInputBlendIndices * 255.0f + SKIN_INDEX_SHIFT;
  60.     
  61.     /// Skin it!
  62.     for (int bone_idx = 0; bone_idx<4; bone_idx++)
  63.     {
  64.         int matrix_idx            = (int)blend_indices[bone_idx];
  65.         float weight            = blend_weights[bone_idx];
  66.         
  67.         float3 bone_position    = weight*mul(input.vPosition,        RsD3DMaterialFromME_mSkinMatrices[matrix_idx]);
  68.         
  69.         tmp_position            += bone_position;
  70.     }
  71.  
  72.     local_vertex_position.xyz = tmp_position.xyz;
  73.     local_vertex_position.w   = 1.0f;
  74.  
  75. #else
  76.  
  77.     local_vertex_position = input.vPosition;
  78.  
  79. #endif //RsShaderHWSKINNING
  80.  
  81.     VS_MATPOINT_OUT output;
  82.     output.vPosition = mul(local_vertex_position, mToClip); //vertex clip position
  83.     output.vPosition.z = ((output.vPosition.z/output.vPosition.w) - fDepthBias) * output.vPosition.w;
  84.     output.cPointColor = cColorMultiplier * input.cPointColor + cColorModifier;
  85.     output.cPointColor.a = fOpacity * input.cPointColor.a;
  86.     output.fPointSize = fSizeMultiplier * input.fPointSize + fSizeModifier;
  87.     return output;
  88. }
  89.  
  90. float4 PS_CMaterialPointRender(float4 cPointColor : COLOR) : COLOR
  91. {
  92.     return cPointColor;
  93. }
  94.  
  95. vertexshader VS_PointRenderer = compile vs_2_0 VS_CMaterialPointRender();
  96.  
  97. pixelshader PS_PointRenderer = compile ps_1_1 PS_CMaterialPointRender();
  98.  
  99. ///Point rendering for PS capable hardware
  100. technique T_PointRender_PS
  101. {
  102.     pass P0
  103.     {
  104.         VertexShader = (VS_PointRenderer);
  105.         PixelShader = (PS_PointRenderer);
  106.  
  107.         AlphaBlendEnable = true;
  108.         SrcBlend = SRCALPHA;
  109.         DestBlend = INVSRCALPHA;
  110.  
  111.         ZEnable = true;
  112.         ZFunc = LESSEQUAL;
  113.         ZWriteEnable = false;
  114.  
  115.         SpecularEnable = false;
  116.         ColorVertex = true;
  117.  
  118.         PointScaleEnable = false;        
  119.         CullMode = NONE;
  120.     }
  121. }
  122.  
  123. technique T_PointRender_Cascade
  124. {
  125.     pass P0
  126.     {
  127.         VertexShader = (VS_PointRenderer);
  128.         PixelShader = NULL;
  129.  
  130.         AlphaBlendEnable = true;
  131.         SrcBlend = SRCALPHA;
  132.         DestBlend = INVSRCALPHA;
  133.  
  134.         ZEnable = true;
  135.         ZFunc = LESSEQUAL;
  136.         ZWriteEnable = false;
  137.         
  138.         Lighting = false;
  139.         ShadeMode = FLAT;
  140.  
  141.         SpecularEnable = false;
  142.         ColorVertex = true;
  143.  
  144.         // Set the stages.
  145.         ColorOp[0]   = SELECTARG1;
  146.         ColorArg1[0] = DIFFUSE;
  147.         ColorOp[1]   = DISABLE;
  148.         AlphaOp[0]   = SELECTARG1;
  149.         AlphaArg1[0] = DIFFUSE;
  150.         AlphaOp[1]   = DISABLE;
  151.  
  152.         PointScaleEnable = false;        
  153.         CullMode = NONE;
  154.     }
  155. }
  156.  
  157. technique T_PointRender_Plain
  158. {
  159.     pass P0
  160.     {
  161.         VertexShader = (VS_PointRenderer);
  162.         PixelShader = NULL;
  163.  
  164.         AlphaBlendEnable = true;
  165.         SrcBlend = SRCALPHA;
  166.         DestBlend = INVSRCALPHA;
  167.  
  168.         ZEnable = true;
  169.         ZFunc = LESSEQUAL;
  170.         ZWriteEnable = false;
  171.         
  172.         Lighting = false;
  173.         ShadeMode = FLAT;
  174.  
  175.         SpecularEnable = false;
  176.         ColorVertex = true;
  177.  
  178.         PointScaleEnable = false;        
  179.         CullMode = NONE;
  180.     }
  181. }
  182.